Matlab批量拟合曲线并绘制在一张图上 | 您所在的位置:网站首页 › matlab 一张图画多条曲线 › Matlab批量拟合曲线并绘制在一张图上 |
文章目录
简单的拟合批量拟合并呈现在一张图上最终结果与完整代码
简单的拟合
在命令行输入 cftool可以启动工具箱 1.在"选择数据"中导入数据 2.选择拟合方法(matlab提供的方法或者你自己定义的函数) matlab提供的方法: 自定义函数:(点击自定义方程后在右边的界面输入) 批量拟合并呈现在一张图上实际处理时,我们经常遇到批量拟合并绘制曲线的情况。 比如给定10组数据,每组7个点,现在需要在一张图上绘制10条拟合曲线。应该如何绘制? 以平滑样条方法为例: 首先,指定平滑参数可以调整拟合程度和粗糙程度。 1.输入cftool打开工具箱,只选取选取一组数据拟合 2.点击生成代码 3.查看代码并做修改 function [fitresult, gof] = createFit1(tx, ty) %CREATEFIT1(TX,TY) % 创建一个拟合。 % % 要进行 '无标题拟合 1' 拟合的数据: % X 输入: tx % Y 输出: ty % 输出: % fitresult: 表示拟合的拟合对象。 % gof: 带有拟合优度信息的结构体。 % % 另请参阅 FIT, CFIT, SFIT. %% 拟合: '无标题拟合 1'。 [xData, yData] = prepareCurveData( tx, ty ); % 设置 fittype 和选项。 ft = fittype( 'smoothingspline' ); opts = fitoptions( 'Method', 'SmoothingSpline' ); opts.SmoothingParam = 0.99545; % 对数据进行模型拟合。 [fitresult, gof] = fit( xData, yData, ft, opts ); % 绘制数据拟合图。 figure( 'Name', '无标题拟合 1' ); h = plot( fitresult, xData, yData ); legend( h, 'ty vs. tx', '无标题拟合 1', 'Location', 'NorthEast', 'Interpreter', 'none' ); % 为坐标区加标签 xlabel( 'tx', 'Interpreter', 'none' ); ylabel( 'ty', 'Interpreter', 'none' ); grid on函数的这个部分是一些设置: ft = fittype( 'smoothingspline' ); opts = fitoptions( 'Method', 'SmoothingSpline' ); opts.SmoothingParam = 0.99545;表示方法使用’SmoothingSpline’平滑样条,参数值设定为0.99545。 接下来进行改动: 首先去除这一行,这样就可以绘制在一张图上。 % 绘制数据拟合图。 figure( 'Name', '无标题拟合 1' );然后在另一个文件中进行批量处理。(比如main函数) %%读入数据 data = xlsread('mydata.xls'); %表格形式是70行2列(每组7个数) x = data(:,1);%第一列为x y = data(:,2);%第二列为y %%单独绘制 for i = 1:7:(70-7) mx = x([i:i+6],1);%每7个取出一次 my = y([i:i+6],1);%同上 scatter(mx,my);%例如用scatter函数 hold on; end得到10组散点 更改函数: %%单独绘制 for i = 1:7:(70-7) mx = x([i:i+6],1);%每7个取出一次 my = y([i:i+6],1);%同上 createFit(mx, my)%改用上文得到的函数 hold on; end得到图: 我们发现颜色不够好看,可以在createFit函数中做如下调整: % 绘制数据拟合图。 col = rand(1,3);%设置随机颜色向量 h = plot( fitresult,xData, yData); h(1).MarkerSize = 8 %更改数据点大小 h(2).Color = col; %更改曲线颜色h(1)对应了数据点,h(2)对应曲线,对其作相应调整。 这里将Color设置成了1*3的随机数向量,所以得到了随机颜色。也可以根据自己的需求定义自己的颜色集。 最终结果与完整代码main函数: data = xlsread('measure.xls'); x = data(:,1); y = data(:,2); for i = 1:7:70 mx = m1([i:i+6],1); my = m2([i:i+6],1); createFit1(mx, my) hold on endcreateFit函数: function [fitresult, gof] = createFit(mx, my) %CREATEFIT(MX,MY) % 创建一个拟合。 % % 要进行 '无标题拟合 1' 拟合的数据: % X 输入: mx % Y 输出: my % 输出: % fitresult: 表示拟合的拟合对象。 % gof: 带有拟合优度信息的结构体。 % % 另请参阅 FIT, CFIT, SFIT. %% 拟合: '无标题拟合 1'。 [xData, yData] = prepareCurveData( mx, my ); % 设置 fittype 和选项。 ft = fittype( 'smoothingspline' ); opts = fitoptions( 'Method', 'SmoothingSpline' ); opts.SmoothingParam = 0.9999992; % 对数据进行模型拟合。 [fitresult, gof] = fit( xData, yData, ft, opts ); % 绘制数据拟合图。 %figure( 'Name', '无标题拟合 1' ); col = rand(1,3); h = plot( fitresult,xData, yData); h(1).MarkerSize = 8 h(2).Color = col; legend( h, 'my vs. mx', '无标题拟合 1', 'Location', 'NorthEast', 'Interpreter', 'none' ); % 为坐标区加标签 xlabel( 'mx', 'Interpreter', 'none' ); ylabel( 'my', 'Interpreter', 'none' ); hold on grid on |
CopyRight 2018-2019 实验室设备网 版权所有 |